/*
 * Zark Fx hoverpulse
 * Based on http://jquery.malsup.com/hoverpulse/
 *
 * demo:
 *     http://jquery.malsup.com/hoverpulse/
 *
 * html example:
 *
 *     <img src="../img/beach1.jpg" fx="hoverpulse[size=100;speed=400;]" style="width:40px; height:40px;" />
 *
 *     <a href="/" style="display:block;" ><img src="../img/beach1.jpg" fx="hoverpulse[size=100;speed=400;]" style="width:40px; height:40px;" /></a>
 *
 */

FX.getFrame('jquery-1.3.2', function(jQuery){

    (function($) {
        /*
         * jQuery HoverPulse Plugin by M. Alsup
         * Examples and docs at: http://malsup.com/jquery/hoverpulse/
         * Dual licensed under the MIT and GPL
         * Requires: jQuery v1.2.6 or later
         * @version: 1.01  26-FEB-2009
         */

        $.fn.hoverpulse = function(options) {
            // in 1.3+ we can fix mistakes with the ready state
            if (this.length == 0) {
                if (!$.isReady && this.selector) {
                    var s = this.selector, c = this.context;
                    $(function() {
                        $(s,c).hoverpulse(options);
                    });
                }
                return this;
            }    
            
            var opts = $.extend({}, $.fn.hoverpulse.defaults, options);

            // parent must be relatively positioned
            this.parent().css({ position: 'relative' });
            // pulsing element must be absolutely positioned
            this.css({ position: 'absolute', top: 0, left: 0 });

            this.each(function() {
                var $this = $(this);
                var w = $this.width(), h = $this.height();
                $this.data('hoverpulse.size', { w: parseInt(w), h: parseInt(h) });
            });

            // bind hover event for behavior
            return this.hover(
                // hover over
                function() {
                    var $this = $(this);
                    $this.parent().css('z-index', opts.zIndexActive);
                    
                    var size = $this.data('hoverpulse.size');
                    var w = size.w, h = size.h;
                    $this.stop().animate({ 
                        top:  ('-'+opts.size+'px'), 
                        left: ('-'+opts.size+'px'), 
                        height: (h+2*opts.size)+'px', 
                        width:	(w+2*opts.size)+'px' 
                    }, opts.speed);
                },
                // hover out
                function() {
                    var $this = $(this);
                    var size = $this.data('hoverpulse.size');
                    var w = size.w, h = size.h;
                    
                    $this.stop().animate({ 
                        top:  0, 
                        left: 0, 
                        height: (h+'px'), 
                        width:	(w+'px') 
                    }, opts.speed, function() {
                        $this.parent().css('z-index', opts.zIndexNormal);
                    });
                }
            );
        };

        $.fn.hoverpulse.defaults = {
            size:  20,
            speed: 200,
            zIndexActive: 100,
            zIndexNormal: 1
        };

    })(jQuery);

    FX.run('hoverpulse', function(attrs){
        var $this = jQuery(this);
        if(attrs.size !== undefined) { attrs.size  = parseInt(attrs.size);  };
        if(attrs.speed !== undefined){ attrs.speed = parseInt(attrs.speed); };
        $this.hoverpulse(attrs);
    });

});
